package com.example.room.database;

import android.content.Context;

import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;

import com.example.room.dao.MasterDao;
import com.example.room.dao.MyJoinTeamDao;
import com.example.room.dao.PublicTeamDao;
import com.example.room.dao.TeamDao;
import com.example.room.dao.TeamMemberDao;
import com.example.room.entity.Master;
import com.example.room.entity.MyJoinTeam;
import com.example.room.entity.PublicTeam;
import com.example.room.entity.Team;
import com.example.room.entity.TeamMember;


/**
 * Database中的3个参数依次为
 * 1、实体类，也就是保存的数据库表，如果有多个，那么都放在{}中即可
 * 2、数据库版本，当数据库的字段发生改变时使用，目前咱们用不上
 * 3、鬼知道啥玩意，false就得了
 * 如果修改了数据库表的字段，那么需要将原来的软件删除重新安装，因为没有写数据库迁移的代码
 */
@Database(entities = {Team.class, Master.class, TeamMember.class, MyJoinTeam.class, PublicTeam.class},version = 1,exportSchema = false)
abstract public class MyDatabase extends RoomDatabase {

    /**
     * A singleton instance of database.
     */
    private static MyDatabase INSTANCE;

    /**
     * 获取本地数据库的一个单一实例，因为获取一个实例的资源消耗很大.
     * @param context application context
     *                For example, context.getApplicationContext();
     * @return an instance of native database named MyDatabase
     */
    public static synchronized MyDatabase getInstance(Context context) {
        if(INSTANCE == null) {
            INSTANCE = Room.databaseBuilder(context, MyDatabase.class,"MyDatabase")
                    .build();
        }
        return INSTANCE;
    }

    /**
     * 获取一个TeamDao的对象
     * @return an instance of TeamDao
     */
    public abstract TeamDao getTeamDao();

    /**
     * 获取一个MasterDao的对象
     * @return an instance of MasterDao
     */
    public abstract MasterDao getMasterDao();

    public abstract TeamMemberDao getTeamMemberDao();

    public abstract MyJoinTeamDao getMyJoinTeamDao();

    public abstract PublicTeamDao getPublicTeamDao();
}
